"""
日期:2022.9.5 10:47
{"username":"cy",“password”:"123","expr":"success"}
{"username":"cy1234",“password”:"123","expr":"账号未注册"}
{"username":"cy",“password”:"123456","expr":"密码输入错误请重新登陆"}
{"username":" cy ",“password”:" 123 ","expr":"success"}
{"username":"xx@$##$#$",“password”:" 123 ","expr":"用户名不能有特殊字符 只能是数字加字母下划线"}
{"username":"张三",“password”:" 123 ","expr":"用户名不能有特殊字符只能是数字加字母下划线"}
{"username":"xx@$##$#$",“password”:" 123 ","expr":"用户名不能有特殊字符只能是数字加字母下划线"}
"""
import unittest

import requests


from api.login_api import LoginAPI


class TestLoginAPI(unittest.TestCase):

       def setUp(self) -> None:
           self.LoginAPI=LoginAPI()
           self.session=requests.Session()

       # 登录成功
       def test01_login_success(self):
            #1.获取验证码
            resp_code = self.LoginAPI.get_verify_code(self.session)
            # 去响应结果进行参数提取  使用json()提取
            verify_code = resp_code.json()["data"]
            # 断言验证码接口是否成功
            self.assertEqual(resp_code.json()["message"],"获取验证码成功","预期结果和实际结果不符 message消息")
            self.assertEqual(resp_code.json()["code"],200,"预期结果和实际结果不符 code实际不是200")
            self.assertEqual(resp_code.status_code,200,"请求状态码不是200")
            #2.进行登录测试
            resp_login = self.LoginAPI.login(self.session,"cy","123",verify_code)

            self.assertEqual(resp_login.json()["message"],"success","实际结果与预期结果不符 message")
            self.assertEqual(resp_login.status_code,200,"实际结果与预期结果不符 请求状态码")
            print(resp_login.text)
       
       # 账号不存在
       def test02_login_error(self):
            #1.获取验证码
            resp_code = self.LoginAPI.get_verify_code(self.session)
            # 去响应结果进行参数提取  使用json()提取
            verify_code = resp_code.json()["data"]
            # 断言验证码接口是否成功
            self.assertEqual(resp_code.json()["message"],"获取验证码成功","预期结果和实际结果不符 message消息")
            self.assertEqual(resp_code.json()["code"],200,"预期结果和实际结果不符 code实际不是200")
            self.assertEqual(resp_code.status_code,200,"请求状态码不是200")
            #2.进行登录测试
            resp_login = self.LoginAPI.login(self.session,"cy123","123",verify_code)
            # print("打印响应结果",resp_code.text)
            self.assertEqual(resp_login.json()["message"],"账号不存在","实际结果与预期结果不符 message")
            self.assertEqual(resp_login.status_code,200,"实际结果与预期结果不符 请求状态码")
           
       # 密码输入错误请重新登陆
       def test03_login_error(self):
            #1.获取验证码
            resp_code = self.LoginAPI.get_verify_code(self.session)
            # 去响应结果进行参数提取  使用json()提取
            verify_code = resp_code.json()["data"]
            # 断言验证码接口是否成功
            self.assertEqual(resp_code.json()["message"],"获取验证码成功","预期结果和实际结果不符 message消息")
            self.assertEqual(resp_code.json()["code"],200,"预期结果和实际结果不符 code实际不是200")
            self.assertEqual(resp_code.status_code,200,"请求状态码不是200")
            #2.进行登录测试
            resp_login = self.LoginAPI.login(self.session,"cy","123456",verify_code)
            # print("打印响应结果",resp_code.text)
            self.assertEqual(resp_login.json()["message"],"密码输入错误请重新登陆","实际结果与预期结果不符 message")
            self.assertEqual(resp_login.status_code,200,"实际结果与预期结果不符 请求状态码")
           
       # 用户名和密码左右分开空格
       def test04_login_success(self):
           # 1.获取验证码
           resp_code = self.LoginAPI.get_verify_code(self.session)
           # 去响应结果进行参数提取  使用json()提取
           verify_code = resp_code.json()["data"]
           # 断言验证码接口是否成功
           self.assertEqual(resp_code.json()["message"], "获取验证码成功", "预期结果和实际结果不符 message消息")
           self.assertEqual(resp_code.json()["code"], 200, "预期结果和实际结果不符 code实际不是200")
           self.assertEqual(resp_code.status_code, 200, "请求状态码不是200")
           # 2.进行登录测试
           resp_login = self.LoginAPI.login(self.session, " cy ", " 123 ",verify_code)
           # print("打印响应结果",resp_code.text)
           self.assertEqual(resp_login.json()["message"],"success","实际结果与预期结果不符 message")
           self.assertEqual(resp_login.status_code,200, "实际结果与预期结果不符 请求状态码")
           print(resp_login.text)

       def tearDown(self) -> None:
           self.session.close()